/**
 * 空值工具类
 */
export class NullUtil {


  /**
   * 判断值是否为 null 或 undefined
   */
  static isNullOrUndefined(value: any): boolean {
    return value === null || value === undefined;
  }

 /**
   * 判断值是否为 null 或 undefined
   */
  static isNotNullUndefined(value: any): boolean {
    return !NullUtil.isNullOrUndefined(value);
  }

  /**
   * 判断字符串是否为空（null、undefined 或空字符串）
   */
  static isEmptyString(str: any): boolean {
    return this.isNullOrUndefined(str) || str.trim() === '';
  }

  /**
   * 判断数组是否为空（null、undefined 或长度为 0）
   */
  static isEmptyArray(arr: any[]): boolean {
    return this.isNullOrUndefined(arr) || arr.length === 0;
  }

  /**
   * 判断对象是否为空（null、undefined 或没有可枚举属性）
   */
  static isEmptyObject(obj: any): boolean {
    if (this.isNullOrUndefined(obj)) return true;
    return Object.keys(obj).length === 0;
  }

  /**
   * 获取安全值，如果原值为 null 或 undefined 则返回默认值
   */
  static getValueOrDefault<T>(value: T | null | undefined, defaultValue: T): T {
    return this.isNullOrUndefined(value) ? defaultValue : (value as T);
  }

  /**
   * 判断是否为有效数字（不为 null、undefined、NaN）
   */
  static isValidNumber(num: any): boolean {
    return !this.isNullOrUndefined(num) && !isNaN(num);
  }
}
